/*
n是一个整数
若是奇数
就把n加一或者减一
若n是偶数则除以2，
求最短步骤实现把n变成1 
*/
#include "junix.h"

bool even(int n) {
	return n%2==0;
}

void f(int n) {
	while (n!=1) {
		if (even(n)) {
			n /= 2;
			printf("(%04d->%04d)\n",n*2,n);
		} else {
			if (((n>>1)&1)==1) {
				++n;
				printf("(%04d->%04d)\n",n-1,n);
			} else {
				--n;
				printf("(%04d->%04d)\n",n+1,n);
			}
		}
	}
}

void f2(int n) {
	while (n!=1) {
		unsigned int result = n&3;
		if (result==0 || result==2) {
			n /= 2;
			printf("(%04d->%04d)\n",n*2,n);
		} else if (result == 1) {
			--n;
			printf("(%04d->%04d)\n",n+1,n);
		} else {
			++ n;
			printf("(%04d->%04d)\n",n-1,n);
		}
	}
}


int function (uint64_t n) {
	assert(n>0);
	if (n==1) return 0;
	
	if (n%2==0)
		return 1+function(n/2);
	else
		return std::min(function((n+1)/2), function((n-1)/2)) + 2;
}

int main(){
	while (true) {
		std::cout<<">>";
		int n;
		if (std::cin>>n) {
			std::cout<<function(n)<<std::endl;
		} else {
			break;
		}
	}
}
